package com.yoda.service.Impl;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yoda.constant.MessageConstant;
import com.yoda.dto.TagDto;
import com.yoda.dto.TagPageQuery;
import com.yoda.entity.YddTag;
import com.yoda.mapper.YddTagMapper;
import com.yoda.result.Result;
import com.yoda.result.PageResult;
import com.yoda.service.IYddTagService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author itcast
 * @since 2023-05-15
 */
@Service
public class YddTagServiceImpl extends ServiceImpl<YddTagMapper, YddTag> implements IYddTagService{
    @Autowired
    private YddTagMapper yddTagMapper;

    /**
     * 新增标签
     *
     * @return
     */
    @Override
    public Result addLabel(TagPageQuery dto) {
        //非空判断
        if (dto.getTagname()==null){
            return Result.error(MessageConstant.UNKNOWN_ERROR);
        }
        //查询名称是否重复
        LambdaQueryWrapper<YddTag> tag = new LambdaQueryWrapper<>();
        tag.eq(dto.getTagname()!=null,YddTag::getTagname,dto.getTagname());
        List<YddTag> list = list(tag);

        if (list!=null&&list.size()>0){
            return Result.error(MessageConstant.LABEL_IS_FOUND);
        }
        YddTag yddTag=new YddTag();
        BeanUtils.copyProperties(dto,yddTag);
        yddTag.setDefaultData("1");
        save(yddTag);
        return Result.success(yddTag);
    }

    /**
     * 修改标签
     *
     * @param dto
     * @return
     */
    @Override
    public Result updateLabel(TagDto dto) {
        //非空判断
        if (dto.getTagname() == null) {
            return Result.error(MessageConstant.UNKNOWN_ERROR);
        }
        removeById(dto.getId());
        YddTag yddTag = new YddTag();
        BeanUtils.copyProperties(dto,yddTag);
        save(yddTag);
        return Result.success();

    }


    /**
     * 查询全部标签
     *
     * @return
     */
    @Override
    public Result selectAll() {
        List<YddTag> yddList = list();

        return Result.success(yddList);
    }

    /**
     * 标签列表分页查询
     *
     * @param dto
     * @return
     */
    @Override
    public Result page(TagPageQuery dto) {
        if (dto.getPage()==null){
            dto.setPage(1);
        }
        if (dto.getLimit()==null){
            dto.setLimit(10);
        }
        //模糊查询
        LambdaQueryWrapper<YddTag> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(dto.getTagname()!=null,YddTag::getTagname,dto.getTagname());
        //开启分页
        IPage<YddTag>page=new Page<>(dto.getPage(),dto.getLimit());
        //创建yddPage分页对象
        IPage<YddTag> yddPage = yddTagMapper.selectPage(page, wrapper);

        PageResult pageResult=new PageResult();
        pageResult.setCount( yddPage.getTotal());
        pageResult.setData(yddPage.getRecords());
        pageResult.setTotalPages( yddPage.getPages());
        pageResult.setPageSize( yddPage.getSize());
        pageResult.setCurrentPage( yddPage.getCurrent());
        return Result.success(pageResult);
    }

    /**
     * 根据id查询标签
     *
     * @param id
     * @return
     */
    @Override
    public Result getById(Integer id) {
        if (id==null){
            return Result.error(MessageConstant.ID_NOT_FOUND);
        }
        YddTag yddTag = yddTagMapper.selectById(id);

        return Result.success(yddTag);
    }

    /**
     * 根据ID删除标签
     *
     * @return
     */
    @Override
    public Result delById(Integer id) {
        if (id==null){
            return Result.error(MessageConstant.ID_NOT_FOUND);
        }
        int i = yddTagMapper.deleteById(id);

        return Result.success(i);
    }
}
